package passwd

import (
	"fmt"
	"unicode"
)

// StrongPasswordChecker 强密码校验器
type StrongPasswordChecker struct {
}

// CheckPassword 检查，true：通过,false: 未通过，并返回错误信息
func (ctr *SaltMd5Password) CheckPassword(pass string) (bool, string) {
	minLen := 6
	maxLen := 30
	if len(pass) < minLen || len(pass) > maxLen {
		return false, fmt.Sprintf("密码长度必须为 %d-%d", minLen, maxLen)
	}

	flag := 0
	for _, v := range pass {
		if unicode.IsDigit(v) {
			//包含数字
			flag = (1 << 0) | flag
		}
		if unicode.IsLetter(v) {
			//包含字母
			flag = (1 << 1) | flag
		}
	}
	if flag != ((1 << 0) | (1 << 1)) {
		return false, "密码必须包含字母和数字"
	}

	return true, "success"
}
